package com.service.user.impl;

import com.dao.CollectionGoodsDao;
import com.entity.GoodCollectionItem;
import com.service.user.CollectionService;
import com.service.user.GoodService;
import com.utils.SqlSessionGetter;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/** 提供收藏相关的功能实现 当前阶段只有商品收藏 */
@Service
public class CollectionServiceImpl implements CollectionService {
  @Autowired GoodService goodService;

  /**
   * 判断商品编号为goodId的商品是否在编号为userId的用户的收藏列表中
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @return 是返回1，不是返回0
   */
  @Override
  public int isGoodInMyCollection(String userId, String goodId) {
    SqlSession session = SqlSessionGetter.getSqlSession();
    CollectionGoodsDao dao = session.getMapper(CollectionGoodsDao.class);
    int count = dao.selectInCollectionGoods(userId, goodId);
    session.close();
    return count;
  }

  /**
   * 将商品编号为goodId的商品添加到编号为userId的用户的收藏列表中
   *
   * @param userId 用户编号
   * @param goodId 待添加到商品收藏列表的商品编号
   * @return 添加成功返回1，否则返回0（如果已经在收藏中就会失败)
   */
  @Override
  public int addGoodToGoodsCollection(String userId, String goodId) {
    SqlSession session = SqlSessionGetter.getSqlSession();
    CollectionGoodsDao dao = session.getMapper(CollectionGoodsDao.class);
    try {
      // 有可能商品已经在收藏中
      dao.insertCollectionGoods(userId, goodId);
      session.commit();
    } catch (Exception exp) { // 商品已在收藏中
      return 0;
    }
    session.close();
    return 1;
  }

  /**
   * 获取用户编号为userId的用户的第pageIndex页的收藏商品条目列表
   *
   * @param userId 用户编号
   * @param pageSize 页大小
   * @param pageIndex 第几页(从0开始)
   * @return 对应页的商品收藏列表
   */
  @Override
  public List<GoodCollectionItem> getGoodsCollectList(String userId, int pageSize, int pageIndex) {
    SqlSession session = SqlSessionGetter.getSqlSession();
    CollectionGoodsDao dao = session.getMapper(CollectionGoodsDao.class);
    List<GoodCollectionItem> cl =
        dao.selectCollectionGoodsList(userId, pageIndex * pageSize, pageSize);
    session.close();
    return cl;
  }

  /**
   * 删除用户编号为userId的用户的编号为goodId的商品收藏条目
   *
   * @param userId 用户编号
   * @param goodId 待删除条目的商品编号
   * @return 删除成功返回1 否则返回0
   */
  @Override
  public int delGoodsCollectionItem(String userId, String goodId) {
    SqlSession session = SqlSessionGetter.getSqlSession();
    CollectionGoodsDao dao = session.getMapper(CollectionGoodsDao.class);
    int row = dao.deleteCollectionGoodsItem(userId, goodId);
    session.commit();
    session.close();
    return row;
  }

  @Override
  public int getGoodCollectionCount(String userId) {
    SqlSession session = SqlSessionGetter.getSqlSession();
    CollectionGoodsDao dao = session.getMapper(CollectionGoodsDao.class);
    int count = dao.selectGoodCollectionCount(userId);
    session.commit();
    session.close();
    return count;
  }
}
